Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

DbSimple обработка запросов в со знаками ' (mishaMC)
Author Message
mishaMC
Заглянувший



Joined: 31 Jan 2006
Posts: 18
Карма: -1
   поощрить/наказать

Location: Тамбов

PostPosted: Thu Apr 26, 2007 11:18 am (написано за 2 минуты 41 секунду)
   Post subject: DbSimple обработка запросов в со знаками '
Reply with quote

Имеется код, где выполняется следующий запрос:
Code (php): скопировать код в буфер обмена
<?php

// ... Some code
$_GET['mont'] = 1;

$table = $DB->select('SELECT * from news WHERE date_create BETWEEN \'2007-?d-01\' AND \'2007-?d-31\'', $_GET['month'], $_GET['month']);

// .. other code
?>
Данный запрос не обрабатывается корректно (плейсхолдеры не заменяются на нужные значения).
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Thu Apr 26, 2007 3:02 pm (спустя 3 часа 43 минуты; написано за 6 секунд)
   Post subject:
Reply with quote

mishaMC
Так и он и не должен :)
Back to top
View user's profile Send private message Send e-mail
mishaMC
Заглянувший



Joined: 31 Jan 2006
Posts: 18
Карма: -1
   поощрить/наказать

Location: Тамбов

PostPosted: Thu Apr 26, 2007 3:21 pm (спустя 19 минут; написано за 1 минуту 32 секунды)
   Post subject:
Reply with quote

А как в таком случае выполнить запрос:
Code (SQL): скопировать код в буфер обмена
SELECT * FROM news BETWEN '2007-01-01' AND '2007-01-31'
если подставлять плейсхолдеры нужно как раз в даты?
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Thu Apr 26, 2007 10:32 pm (спустя 7 часов 10 минут; написано за 2 минуты 1 секунду)
   Post subject:
Reply with quote

Code (php): скопировать код в буфер обмена
$DB->select('SELECT * from news WHERE date_create BETWEEN ?d AND ?d', '2007-'.$_GET['month'].'-01', '2007-'.$_GET['month'].'-31');
А что должен был делать Ваш изначальный код - совсем непонятно, если честно. Может, Вы плохо представляете себе, зачем вообще нужны плейсхолдеры :)?
Back to top
View user's profile Send private message Send e-mail
mishaMC
Заглянувший



Joined: 31 Jan 2006
Posts: 18
Карма: -1
   поощрить/наказать

Location: Тамбов

PostPosted: Fri Apr 27, 2007 10:48 am (спустя 12 часов 16 минут; написано за 4 минуты 18 секунд)
   Post subject:
Reply with quote

Код должен из БД выбрать новости за определенный месяц. Параметр месяца передается методом GET. Плейсхолдеры нужны для того, чтобы избежать SQL-инъекции, и пользователь не передал вместо месяца другое значение.
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Fri Apr 27, 2007 4:35 pm (спустя 5 часов 47 минут; написано за 25 секунд)
   Post subject:
Reply with quote

mishaMC
Вместо вопросика уже подставляется значение в кавычках.
Back to top
View user's profile Send private message Send e-mail
mishaMC
Заглянувший



Joined: 31 Jan 2006
Posts: 18
Карма: -1
   поощрить/наказать

Location: Тамбов

PostPosted: Fri Apr 27, 2007 5:12 pm (спустя 36 минут; написано за 2 секунды)
   Post subject:
Reply with quote

Библиотека не должна подставлять значение в кавычках, т.к. используется целочисленный плейсхолдер: "?d".
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Fri Apr 27, 2007 6:31 pm (спустя 1 час 19 минут; написано за 33 секунды)
   Post subject:
Reply with quote

mishaMC
Да, странно. Мой пример, согласно документации и исходному коду библиотеки, тоже не должен работать. Он не работает?
Back to top
View user's profile Send private message Send e-mail
mishaMC
Заглянувший



Joined: 31 Jan 2006
Posts: 18
Карма: -1
   поощрить/наказать

Location: Тамбов

PostPosted: Fri Apr 27, 2007 9:02 pm (спустя 2 часа 30 минут; написано за 1 минуту 22 секунды)
   Post subject:
Reply with quote

Да, Ваш пример не работает.

Интересно, в библиотеке есть метод, который выводит запрос с уже проставленными плейсхолдерами, не выполняя его к БД? Что-то вроде отладочной функции? Судя по документации вроде бы такового нет.
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Fri Apr 27, 2007 9:50 pm (спустя 47 минут; написано за 36 секунд)
   Post subject:
Reply with quote

mishaMC
Я думаю, есть :). Поковыряйте библиотеку, найдите в ней место, где непосредственно вызывается mysql_query(), и сделайте там отладочный вывод, какой Вам нравится :).
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Sat Apr 28, 2007 9:25 am (спустя 11 часов 35 минут; написано за 1 минуту 9 секунд)
   Post subject:
Reply with quote

mishaMC, емнип, в случае MySQL подстановку в плейсхолдеры осуществляет сам SQL сервер.
Back to top
mishaMC
Заглянувший



Joined: 31 Jan 2006
Posts: 18
Карма: -1
   поощрить/наказать

Location: Тамбов

PostPosted: Sat Apr 28, 2007 11:17 am (спустя 1 час 51 минуту; написано за 2 минуты 11 секунд)
   Post subject:
Reply with quote

Anonymous wrote:
mishaMC, емнип, в случае MySQL подстановку в плейсхолдеры осуществляет сам SQL сервер.
Если вы не понимаете о чем мы говорим, то лучше не пишите.
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Sun Apr 29, 2007 1:26 am (спустя 14 часов 9 минут; написано за 16 секунд)
   Post subject:
Reply with quote

я прекрасно понимаю о чём вы говорите :)
Back to top
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Sun Apr 29, 2007 1:52 am (спустя 26 минут; написано за 5 секунд)
   Post subject:
Reply with quote

Гость wrote:
в случае MySQL подстановку в плейсхолдеры осуществляет сам SQL сервер.
Это не так.
Back to top
View user's profile Send private message Send e-mail
mishaMC
Заглянувший



Joined: 31 Jan 2006
Posts: 18
Карма: -1
   поощрить/наказать

Location: Тамбов

PostPosted: Sun Apr 29, 2007 9:17 pm (спустя 19 часов 25 минут; написано за 57 секунд)
   Post subject:
Reply with quote

Ковырял библиотеку, ковырял... Стало лень, это уже получается не DbSimple. Хотелось бы услышать мнения Дмитрия (автора библиотеки), по этому вопросу.
Back to top
View user's profile Send private message Send e-mail
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Joined: 12 Jun 2004
Posts: 2264
Карма: 106
   поощрить/наказать

Location: Москва

PostPosted: Mon Apr 30, 2007 1:19 pm (спустя 16 часов 1 минуту; написано за 4 минуты 38 секунд)
   Post subject:
Reply with quote

Так надежнее.
Code (php): скопировать код в буфер обмена
$m = sprintf (www.php.net/sprintf)('%02d', (int) $_GET['month']);

if (!($m > 0 && $m < 13)) return false;

$news = $DB->select(
        'SELECT * from news WHERE date_create BETWEEN ? AND ?',
        "2007-$m-01",
        "2007-$m-31"
);
Back to top
View user's profile Send private message
mishaMC
Заглянувший



Joined: 31 Jan 2006
Posts: 18
Карма: -1
   поощрить/наказать

Location: Тамбов

PostPosted: Wed May 02, 2007 11:39 am (спустя 1 день 22 часа 20 минут; написано за 7 минут 11 секунд)
   Post subject:
Reply with quote

Константин Жинько [tIT] wrote:
Так надежнее.....
Code (php): скопировать код в буфер обмена
$m = sprintf (www.php.net/sprintf)('%02d', (int) $_GET['month']);
...
Константин, вы гений! Теперь запрос работает. Но все же, наверное, было бы неплохо добавить в библиотеку метод, который бы выводил запрос с уже выполненной проставленными плейсхолдерами для более легкой отладки скриптов.
Back to top
View user's profile Send private message Send e-mail
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Joined: 12 Jun 2004
Posts: 2264
Карма: 106
   поощрить/наказать

Location: Москва

PostPosted: Wed May 02, 2007 4:50 pm (спустя 5 часов 10 минут; написано за 2 минуты 44 секунды)
   Post subject:
Reply with quote

mishaMC wrote:
Константин, вы гений!
Спорно, но приятно (-;
mishaMC wrote:
Но все же, наверное, было бы неплохо добавить в библиотеку метод, который бы выводил запрос с уже выполненной проставленными плейсхолдерами для более легкой отладки скриптов.
Так setLogger() предоставляет всю необходимую информацию по запросу. Повесьте обработчик, как это сказано в документации и будет Вам счастье.
Back to top
View user's profile Send private message
Guest






Карма: 388
   поощрить/наказать


PostPosted: Sat May 05, 2007 4:12 pm (спустя 2 дня 23 часа 22 минуты; написано за 10 секунд)
   Post subject:
Reply with quote

Quote:
Это не так.
плохо. надо бы сделать!
Back to top
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Sat May 05, 2007 5:14 pm (спустя 1 час 2 минуты; написано за 1 секунду)
   Post subject:
Reply with quote

Это к разработчикам MySQL
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Sun May 06, 2007 10:25 am (спустя 17 часов 10 минут; написано за 44 секунды)
   Post subject:
Reply with quote

Юpий Насрeтдинов, разработчики mysql уже давно реализовали плейсхолдеры, а разработчики php уже давно реализовали mysqli.
Back to top
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Mon May 07, 2007 2:20 am (спустя 15 часов 55 минут; написано за 23 секунды)
   Post subject:
Reply with quote

Гость
В таком случае просто идите нафиг :). Нужно иметь один и тот же интерфейс плейсхолдеров для различных БД.
Back to top
View user's profile Send private message Send e-mail
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Joined: 12 Jun 2004
Posts: 2264
Карма: 106
   поощрить/наказать

Location: Москва

PostPosted: Tue May 08, 2007 6:07 pm (спустя 1 день 15 часов 46 минут; написано за 1 минуту 29 секунд)
   Post subject:
Reply with quote

Гость wrote:
разработчики mysql уже давно реализовали плейсхолдеры
Только по-своему (читай, через одно место) и насколько я нарыл в документации, они доступны при разработке библиотек.
А про mysqli вообще отдельная история - на кой черт он нужен, если в качестве слоя абстракции используется DbSimple?
Back to top
View user's profile Send private message
Guest






Карма: 388
   поощрить/наказать


PostPosted: Thu May 10, 2007 2:51 pm (спустя 1 день 20 часов 43 минуты)
   Post subject:
Reply with quote

www.phpclub.ru/detail/article/mysqli
Back to top
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Thu May 10, 2007 6:55 pm (спустя 4 часа 4 минуты; написано за 1 минуту 27 секунд)
   Post subject:
Reply with quote

Гость
Code (php): скопировать код в буфер обмена
$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
$stmt->bind_param('sssd', $code, $language, $official, $percent);

$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;

/*
$stmt->execute();

printf (www.php.net/printf)("%d Row inserted.\n", $stmt->affected_rows);

/*
$stmt->close();
Вам не кажется это намного более длинным, чем
Code (php): скопировать код в буфер обмена
$DBS->query("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?d)", 'DEU', 'Bavarian', "F", 11.2);
?
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Sun Jun 10, 2007 2:26 am (спустя 30 дней 7 часов 31 минуту; написано за 1 минуту 34 секунды)
   Post subject:
Reply with quote

я не предлагаю использовать mysqli в голом виде - боже упаси :) сейчас же вы используете семейство функций mysql_ внутри этого класс? что мешает поменять mysql на mysqli?
Back to top
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML